﻿// using LuaTypeSystem;
//
// using Mono.Cecil;
// using Mono.Cecil.Cil;
// namespace il2lua
// {
//     public class MethodContext
//     {
//         private readonly IList<ILuaRole> _returns;
//         private readonly IList<ILuaRole> _paramerers;
//         private readonly IDictionary<string, ILuaRole> _locals;
//         public MethodContext()
//         {
//             _returns = new List<ILuaRole>();
//             _paramerers = new List<ILuaRole>();
//             _locals = new Dictionary<string, ILuaRole>();
//         }
//         public ILuaRole GetRole(ParameterDefinition parameter)
//         {
//             var key = $"{parameter.Name}";
//             if (_roles.TryGetValue(key, out var role))
//                 return role;
//             role = new LuaRole(parameter.Name, string.Empty);
//             _roles[key] = role;
//             return role;
//         }
//         public ILuaRole GetRole(VariableReference variable)
//         {
//             return GetRole(variable.Resolve());
//         }
//         public ILuaRole GetRole(VariableDefinition variable)
//         {
//             var key = $"loc_{variable.Index}";
//             if (_roles.TryGetValue(key, out var role))
//                 return role;
//
//             role = new LuaRole(key, string.Empty);
//             _roles[key] = role;
//             return role;
//         }
//         public LuaRole GetRole(ParameterReference parameter)
//         {
//             return GetRole(parameter.Resolve());
//         }
//         public void PushLoacl(LuaVariable variable)
//         {
//             _locals.Add(variable);
//         }
//         
//     }
// }
// public class MethodContext
// {
//     List<LuaVariable> _locals = new List<LuaVariable>();
//     List<LuaRole> _returns = new List<LuaRole>();
//     List<LuaVariable> _parameters = new List<LuaVariable>();
//     private Dictionary<string, LuaRole> _roles = new Dictionary<string, LuaRole>();
//     public LuaVariable[] Locals => _locals.ToArray();
//     public LuaRole[] Returns => _returns.ToArray();
//     public LuaVariable[] Parameters => _parameters.ToArray();
//     public MethodContext(MethodDefinition method)
//     {
//         if (method.HasThis)
//             _parameters.Add(new LuaVariable(new LuaRole("self", String.Empty), VariableFlag.Param));
//     }
//     public LuaRole GetRole(ParameterDefinition parameter)
//     {
//         var key = $"{parameter.Name}";
//         if (_roles.TryGetValue(key, out var role))
//             return role;
//         role = new LuaRole(parameter.Name, string.Empty);
//         _roles[key] = role;
//         return role;
//     }
//     public LuaRole GetRole(VariableReference variable)
//     {
//         return GetRole(variable.Resolve());
//     }
//     public LuaRole GetRole(VariableDefinition variable)
//     {
//         var key = $"loc_{variable.Index}";
//         if (_roles.TryGetValue(key, out var role))
//             return role;
//
//         role = new LuaRole(key, string.Empty);
//         _roles[key] = role;
//         return role;
//     }
//     public LuaRole GetRole(ParameterReference parameter)
//     {
//         return GetRole(parameter.Resolve());
//     }
//     public void PushLoacl(LuaVariable variable)
//     {
//         _locals.Add(variable);
//     }
//     public void PushReturn(LuaRole role)
//     {
//         _returns.Add(role);
//     }
//     public void PushParam(LuaVariable param)
//     {
//         _parameters.Add(param);
//     }
// }
